home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / gas_251.zip / bin_251 / bfd / aout-target.h < prev    next >
C/C++ Source or Header  |  1994-10-21  |  17KB  |  566 lines

  1. /* Define a target vector and some small routines for a variant of a.out.
  2.    Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
  3.  
  4. This file is part of BFD, the Binary File Descriptor library.
  5.  
  6. This program is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2 of the License, or
  9. (at your option) any later version.
  10.  
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with this program; if not, write to the Free Software
  18. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. #include "aout/aout64.h"
  21. #include "aout/stab_gnu.h"
  22. #include "aout/ar.h"
  23. /*#include "libaout.h"*/
  24.  
  25. extern CONST struct reloc_howto_struct * NAME(aout,reloc_type_lookup) ();
  26.  
  27. /* Set parameters about this a.out file that are machine-dependent.
  28.    This routine is called from some_aout_object_p just before it returns.  */
  29. #ifndef MY_callback
  30. static const bfd_target *
  31. MY(callback) (abfd)
  32.      bfd *abfd;
  33. {
  34.   struct internal_exec *execp = exec_hdr (abfd);
  35.   unsigned int arch_align_power;
  36.   unsigned long arch_align;
  37.  
  38.   /* Calculate the file positions of the parts of a newly read aout header */
  39.   obj_textsec (abfd)->_raw_size = N_TXTSIZE(*execp);
  40.  
  41.   /* The virtual memory addresses of the sections */
  42.   obj_textsec (abfd)->vma = N_TXTADDR(*execp);
  43.   obj_datasec (abfd)->vma = N_DATADDR(*execp);
  44.   obj_bsssec  (abfd)->vma = N_BSSADDR(*execp);
  45.  
  46.   /* The file offsets of the sections */
  47.   obj_textsec (abfd)->filepos = N_TXTOFF (*execp);
  48.   obj_datasec (abfd)->filepos = N_DATOFF (*execp);
  49.  
  50.   /* The file offsets of the relocation info */
  51.   obj_textsec (abfd)->rel_filepos = N_TRELOFF(*execp);
  52.   obj_datasec (abfd)->rel_filepos = N_DRELOFF(*execp);
  53.  
  54.   /* The file offsets of the string table and symbol table.  */
  55.   obj_sym_filepos (abfd) = N_SYMOFF (*execp);
  56.   obj_str_filepos (abfd) = N_STROFF (*execp);
  57.   
  58.   /* Determine the architecture and machine type of the object file.  */
  59. #ifdef SET_ARCH_MACH
  60.   SET_ARCH_MACH(abfd, *execp);
  61. #else
  62.   bfd_default_set_arch_mach(abfd, DEFAULT_ARCH, 0);
  63. #endif
  64.  
  65.   /* Now that we know the architecture, set the alignments of the
  66.      sections.  This is normally done by NAME(aout,new_section_hook),
  67.      but when the initial sections were created the architecture had
  68.      not yet been set.  However, for backward compatibility, we don't
  69.      set the alignment power any higher than as required by the size
  70.      of the section.  */
  71.   arch_align_power = bfd_get_arch_info (abfd)->section_align_power;
  72.   arch_align = 1 << arch_align_power;
  73.   if ((BFD_ALIGN (obj_textsec (abfd)->_raw_size, arch_align)
  74.        == obj_textsec (abfd)->_raw_size)
  75.       && (BFD_ALIGN (obj_datasec (abfd)->_raw_size, arch_align)
  76.       == obj_datasec (abfd)->_raw_size)
  77.       && (BFD_ALIGN (obj_bsssec (abfd)->_raw_size, arch_align)
  78.       == obj_bsssec (abfd)->_raw_size))
  79.     {
  80.       obj_textsec (abfd)->alignment_power = arch_align_power;
  81.       obj_datasec (abfd)->alignment_power = arch_align_power;
  82.       obj_bsssec (abfd)->alignment_power = arch_align_power;
  83.     }
  84.  
  85.   /* Don't set sizes now -- can't be sure until we know arch & mach.
  86.      Sizes get set in set_sizes callback, later.  */
  87. #if 0
  88.   adata(abfd).page_size = PAGE_SIZE;
  89. #ifdef SEGMENT_SIZE
  90.   adata(abfd).segment_size = SEGMENT_SIZE;
  91. #else
  92.   adata(abfd).segment_size = PAGE_SIZE;
  93. #endif
  94.   adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;
  95. #endif
  96.  
  97.   return abfd->xvec;
  98. }
  99. #endif
  100.  
  101. #ifndef MY_object_p
  102. /* Finish up the reading of an a.out file header */
  103.  
  104. static const bfd_target *
  105. MY(object_p) (abfd)
  106.      bfd *abfd;
  107. {
  108.   struct external_exec exec_bytes;    /* Raw exec header from file */
  109.   struct internal_exec exec;        /* Cleaned-up exec header */
  110.   const bfd_target *target;
  111.  
  112.   if (bfd_read ((PTR) &exec_bytes, 1, EXEC_BYTES_SIZE, abfd)
  113.       != EXEC_BYTES_SIZE) {
  114.     if (bfd_get_error () != bfd_error_system_call)
  115.       bfd_set_error (bfd_error_wrong_format);
  116.     return 0;
  117.   }
  118.  
  119. #ifdef SWAP_MAGIC
  120.   exec.a_info = SWAP_MAGIC (exec_bytes.e_info);
  121. #else
  122.   exec.a_info = bfd_h_get_32 (abfd, exec_bytes.e_info);
  123. #endif /* SWAP_MAGIC */
  124.  
  125.   if (N_BADMAG (exec)) return 0;
  126. #ifdef MACHTYPE_OK
  127.   if (!(MACHTYPE_OK (N_MACHTYPE (exec)))) return 0;
  128. #endif
  129.  
  130.   NAME(aout,swap_exec_header_in)(abfd, &exec_bytes, &exec);
  131.  
  132. #ifdef SWAP_MAGIC
  133.   /* swap_exec_header_in read in a_info with the wrong byte order */
  134.   exec.a_info = SWAP_MAGIC (exec_bytes.e_info);
  135. #endif /* SWAP_MAGIC */
  136.  
  137.   target = NAME(aout,some_aout_object_p) (abfd, &exec, MY(callback));
  138.  
  139. #ifdef ENTRY_CAN_BE_ZERO
  140.   /* The NEWSOS3 entry-point is/was 0, which (amongst other lossage)
  141.    * means that it isn't obvious if EXEC_P should be set.
  142.    * All of the following must be true for an executable:
  143.    * There must be no relocations, the bfd can be neither an
  144.    * archive nor an archive element, and the file must be executable. */
  145.  
  146.   if (exec.a_trsize + exec.a_drsize == 0
  147.       && bfd_get_format(abfd) == bfd_object && abfd->my_archive == NULL)
  148.     {
  149.       struct stat buf;
  150. #ifndef S_IXUSR
  151. #define S_IXUSR 0100    /* Execute by owner.  */
  152. #endif
  153.       if (stat(abfd->filename, &buf) == 0 && (buf.st_mode & S_IXUSR))
  154.     abfd->flags |= EXEC_P;
  155.     }
  156. #endif /* ENTRY_CAN_BE_ZERO */
  157.  
  158.   return target;
  159. }
  160. #define MY_object_p MY(object_p)
  161. #endif
  162.  
  163.  
  164. #ifndef MY_mkobject
  165. static boolean
  166. MY(mkobject) (abfd)
  167.      bfd *abfd;
  168. {
  169.   if (NAME(aout,mkobject)(abfd) == false)
  170.     return false;
  171. #if 0 /* Sizes get set in set_sizes callback, later, after we know
  172.      the architecture and machine.  */
  173.   adata(abfd).page_size = PAGE_SIZE;
  174. #ifdef SEGMENT_SIZE
  175.   adata(abfd).segment_size = SEGMENT_SIZE;
  176. #else
  177.   adata(abfd).segment_size = PAGE_SIZE;
  178. #endif
  179.   adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;
  180. #endif
  181.   return true;
  182. }
  183. #define MY_mkobject MY(mkobject)
  184. #endif
  185.  
  186. #ifndef MY_bfd_copy_private_section_data
  187.  
  188. /* Copy private section data.  This actually does nothing with the
  189.    sections.  It copies the subformat field.  We copy it here, because
  190.    we need to know whether this is a QMAGIC file before we set the
  191.    section contents, and copy_private_bfd_data is not called until
  192.    after the section contents have been set.  */
  193.  
  194. /*ARGSUSED*/
  195. static boolean
  196. MY_bfd_copy_private_section_data (ibfd, isec, obfd, osec)
  197.      bfd *ibfd;
  198.      asection *isec;
  199.      bfd *obfd;
  200.      asection *osec;
  201. {
  202.   obj_aout_subformat (obfd) = obj_aout_subformat (ibfd);
  203.   return true;
  204. }
  205.  
  206. #endif
  207.  
  208. /* Write an object file.
  209.    Section contents have already been written.  We write the
  210.    file header, symbols, and relocation.  */
  211.  
  212. #ifndef MY_write_object_contents
  213. static boolean
  214. MY(write_object_contents) (abfd)
  215.      bfd *abfd;
  216. {
  217.   struct external_exec exec_bytes;
  218.   struct internal_exec *execp = exec_hdr (abfd);
  219.  
  220. #if CHOOSE_RELOC_SIZE
  221.   CHOOSE_RELOC_SIZE(abfd);
  222. #else
  223.   obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
  224. #endif
  225.  
  226.   WRITE_HEADERS(abfd, execp);
  227.  
  228.   return true;
  229. }
  230. #define MY_write_object_contents MY(write_object_contents)
  231. #endif
  232.  
  233. #ifndef MY_set_sizes
  234. static boolean
  235. MY(set_sizes) (abfd)
  236.      bfd *abfd;
  237. {
  238.   adata(abfd).page_size = PAGE_SIZE;
  239.  
  240. #ifdef SEGMENT_SIZE
  241.   adata(abfd).segment_size = SEGMENT_SIZE;
  242. #else
  243.   adata(abfd).segment_size = PAGE_SIZE;
  244. #endif
  245.  
  246. #ifdef ZMAGIC_DISK_BLOCK_SIZE
  247.   adata(abfd).zmagic_disk_block_size = ZMAGIC_DISK_BLOCK_SIZE;
  248. #else
  249.   adata(abfd).zmagic_disk_block_size = PAGE_SIZE;
  250. #endif
  251.  
  252.   adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;
  253.   return true;
  254. }
  255. #define MY_set_sizes MY(set_sizes)
  256. #endif
  257.  
  258. #ifndef MY_exec_hdr_flags
  259. #define MY_exec_hdr_flags 0
  260. #endif
  261.  
  262. #ifndef MY_backend_data
  263.  
  264. #ifndef MY_zmagic_contiguous
  265. #define MY_zmagic_contiguous 0
  266. #endif
  267. #ifndef MY_text_includes_header
  268. #define MY_text_includes_header 0
  269. #endif
  270. #ifndef MY_add_dynamic_symbols
  271. #define MY_add_dynamic_symbols 0
  272. #endif
  273. #ifndef MY_add_one_symbol
  274. #define MY_add_one_symbol 0
  275. #endif
  276. #ifndef MY_link_dynamic_object
  277. #define MY_link_dynamic_object 0
  278. #endif
  279. #ifndef MY_write_dynamic_symbol
  280. #define MY_write_dynamic_symbol 0
  281. #endif
  282. #ifndef MY_check_dynamic_reloc
  283. #define MY_check_dynamic_reloc 0
  284. #endif
  285. #ifndef MY_finish_dynamic_link
  286. #define MY_finish_dynamic_link 0
  287. #endif
  288.  
  289. static CONST struct aout_backend_data MY(backend_data) = {
  290.   MY_zmagic_contiguous,
  291.   MY_text_includes_header,
  292.   MY_exec_hdr_flags,
  293.   0,                /* text vma? */
  294.   MY_set_sizes,
  295.   0,                /* exec header is counted */
  296.   MY_add_dynamic_symbols,
  297.   MY_add_one_symbol,
  298.   MY_link_dynamic_object,
  299.   MY_write_dynamic_symbol,
  300.   MY_check_dynamic_reloc,
  301.   MY_finish_dynamic_link
  302. };
  303. #define MY_backend_data &MY(backend_data)
  304. #endif
  305.  
  306. #ifndef MY_final_link_callback
  307.  
  308. /* Callback for the final_link routine to set the section offsets.  */
  309.  
  310. static void MY_final_link_callback
  311.   PARAMS ((bfd *, file_ptr *, file_ptr *, file_ptr *));
  312.  
  313. static void
  314. MY_final_link_callback (abfd, ptreloff, pdreloff, psymoff)
  315.      bfd *abfd;
  316.      file_ptr *ptreloff;
  317.      file_ptr *pdreloff;
  318.      file_ptr *psymoff;
  319. {
  320.   struct internal_exec *execp = exec_hdr (abfd);
  321.  
  322.   *ptreloff = N_TRELOFF (*execp);
  323.   *pdreloff = N_DRELOFF (*execp);
  324.   *psymoff = N_SYMOFF (*execp);
  325. }
  326.  
  327. #endif
  328.  
  329. #ifndef MY_bfd_final_link
  330.  
  331. /* Final link routine.  We need to use a call back to get the correct
  332.    offsets in the output file.  */
  333.  
  334. static boolean
  335. MY_bfd_final_link (abfd, info)
  336.      bfd *abfd;
  337.      struct bfd_link_info *info;
  338. {
  339.   return NAME(aout,final_link) (abfd, info, MY_final_link_callback);
  340. }
  341.  
  342. #endif
  343.  
  344. /* We assume BFD generic archive files.  */
  345. #ifndef    MY_openr_next_archived_file
  346. #define    MY_openr_next_archived_file    bfd_generic_openr_next_archived_file
  347. #endif
  348. #ifndef    MY_generic_stat_arch_elt
  349. #define    MY_generic_stat_arch_elt    bfd_generic_stat_arch_elt
  350. #endif
  351. #ifndef    MY_slurp_armap
  352. #define    MY_slurp_armap            bfd_slurp_bsd_armap
  353. #endif
  354. #ifndef    MY_slurp_extended_name_table
  355. #define    MY_slurp_extended_name_table    _bfd_slurp_extended_name_table
  356. #endif
  357. #ifndef MY_construct_extended_name_table
  358. #define MY_construct_extended_name_table \
  359.   _bfd_archive_bsd_construct_extended_name_table
  360. #endif
  361. #ifndef    MY_write_armap
  362. #define    MY_write_armap        bsd_write_armap
  363. #endif
  364. #ifndef    MY_truncate_arname
  365. #define    MY_truncate_arname        bfd_bsd_truncate_arname
  366. #endif
  367. #ifndef MY_update_armap_timestamp
  368. #define MY_update_armap_timestamp _bfd_archive_bsd_update_armap_timestamp
  369. #endif
  370.  
  371. /* No core file defined here -- configure in trad-core.c separately.  */
  372. #ifndef    MY_core_file_failing_command
  373. #define    MY_core_file_failing_command _bfd_nocore_core_file_failing_command
  374. #endif
  375. #ifndef    MY_core_file_failing_signal
  376. #define    MY_core_file_failing_signal    _bfd_nocore_core_file_failing_signal
  377. #endif
  378. #ifndef    MY_core_file_matches_executable_p
  379. #define    MY_core_file_matches_executable_p    \
  380.                 _bfd_nocore_core_file_matches_executable_p
  381. #endif
  382. #ifndef    MY_core_file_p
  383. #define    MY_core_file_p        _bfd_dummy_target
  384. #endif
  385.  
  386. #ifndef MY_bfd_debug_info_start
  387. #define MY_bfd_debug_info_start        bfd_void
  388. #endif
  389. #ifndef MY_bfd_debug_info_end
  390. #define MY_bfd_debug_info_end        bfd_void
  391. #endif
  392. #ifndef MY_bfd_debug_info_accumulate
  393. #define MY_bfd_debug_info_accumulate    \
  394.             (void (*) PARAMS ((bfd*, struct sec *))) bfd_void
  395. #endif
  396.  
  397. #ifndef MY_core_file_failing_command
  398. #define MY_core_file_failing_command NAME(aout,core_file_failing_command)
  399. #endif
  400. #ifndef MY_core_file_failing_signal
  401. #define MY_core_file_failing_signal NAME(aout,core_file_failing_signal)
  402. #endif
  403. #ifndef MY_core_file_matches_executable_p
  404. #define MY_core_file_matches_executable_p NAME(aout,core_file_matches_executable_p)
  405. #endif
  406. #ifndef MY_set_section_contents
  407. #define MY_set_section_contents NAME(aout,set_section_contents)
  408. #endif
  409. #ifndef MY_get_section_contents
  410. #define MY_get_section_contents NAME(aout,get_section_contents)
  411. #endif
  412. #ifndef MY_new_section_hook
  413. #define MY_new_section_hook NAME(aout,new_section_hook)
  414. #endif
  415. #ifndef MY_get_symtab_upper_bound
  416. #define MY_get_symtab_upper_bound NAME(aout,get_symtab_upper_bound)
  417. #endif
  418. #ifndef MY_get_symtab
  419. #define MY_get_symtab NAME(aout,get_symtab)
  420. #endif
  421. #ifndef MY_get_reloc_upper_bound
  422. #define MY_get_reloc_upper_bound NAME(aout,get_reloc_upper_bound)
  423. #endif
  424. #ifndef MY_canonicalize_reloc
  425. #define MY_canonicalize_reloc NAME(aout,canonicalize_reloc)
  426. #endif
  427. #ifndef MY_make_empty_symbol
  428. #define MY_make_empty_symbol NAME(aout,make_empty_symbol)
  429. #endif
  430. #ifndef MY_print_symbol
  431. #define MY_print_symbol NAME(aout,print_symbol)
  432. #endif
  433. #ifndef MY_get_symbol_info
  434. #define MY_get_symbol_info NAME(aout,get_symbol_info)
  435. #endif
  436. #ifndef MY_get_lineno
  437. #define MY_get_lineno NAME(aout,get_lineno)
  438. #endif
  439. #ifndef MY_set_arch_mach
  440. #define MY_set_arch_mach NAME(aout,set_arch_mach)
  441. #endif
  442. #ifndef MY_find_nearest_line
  443. #define MY_find_nearest_line NAME(aout,find_nearest_line)
  444. #endif
  445. #ifndef MY_sizeof_headers
  446. #define MY_sizeof_headers NAME(aout,sizeof_headers)
  447. #endif
  448. #ifndef MY_bfd_get_relocated_section_contents
  449. #define MY_bfd_get_relocated_section_contents \
  450.             bfd_generic_get_relocated_section_contents
  451. #endif
  452. #ifndef MY_bfd_relax_section
  453. #define MY_bfd_relax_section bfd_generic_relax_section
  454. #endif
  455. #ifndef MY_bfd_reloc_type_lookup
  456. #define MY_bfd_reloc_type_lookup NAME(aout,reloc_type_lookup)
  457. #endif
  458. #ifndef MY_bfd_make_debug_symbol
  459. #define MY_bfd_make_debug_symbol 0
  460. #endif
  461. #ifndef MY_bfd_link_hash_table_create
  462. #define MY_bfd_link_hash_table_create NAME(aout,link_hash_table_create)
  463. #endif
  464. #ifndef MY_bfd_link_add_symbols
  465. #define MY_bfd_link_add_symbols NAME(aout,link_add_symbols)
  466. #endif
  467.  
  468. #ifndef MY_bfd_copy_private_bfd_data
  469. #define MY_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data
  470. #endif
  471.  
  472. #ifndef MY_bfd_is_local_label
  473. #define MY_bfd_is_local_label bfd_generic_is_local_label
  474. #endif
  475.  
  476. #ifndef MY_bfd_free_cached_info
  477. #define MY_bfd_free_cached_info NAME(aout,bfd_free_cached_info)
  478. #endif
  479.  
  480. #ifndef MY_close_and_cleanup
  481. #define MY_close_and_cleanup MY_bfd_free_cached_info
  482. #endif
  483.  
  484. #ifndef MY_get_dynamic_symtab_upper_bound
  485. #define MY_get_dynamic_symtab_upper_bound \
  486.   _bfd_nodynamic_get_dynamic_symtab_upper_bound
  487. #endif
  488. #ifndef MY_canonicalize_dynamic_symtab
  489. #define MY_canonicalize_dynamic_symtab \
  490.   _bfd_nodynamic_canonicalize_dynamic_symtab
  491. #endif
  492. #ifndef MY_get_dynamic_reloc_upper_bound
  493. #define MY_get_dynamic_reloc_upper_bound \
  494.   _bfd_nodynamic_get_dynamic_reloc_upper_bound
  495. #endif
  496. #ifndef MY_canonicalize_dynamic_reloc
  497. #define MY_canonicalize_dynamic_reloc \
  498.   _bfd_nodynamic_canonicalize_dynamic_reloc
  499. #endif
  500.  
  501. /* Aout symbols normally have leading underscores */
  502. #ifndef MY_symbol_leading_char 
  503. #define MY_symbol_leading_char '_'
  504. #endif
  505.  
  506. /* Aout archives normally use spaces for padding */
  507. #ifndef AR_PAD_CHAR
  508. #define AR_PAD_CHAR ' '
  509. #endif
  510.  
  511. #ifndef MY_BFD_TARGET
  512. const bfd_target MY(vec) =
  513. {
  514.   TARGETNAME,        /* name */
  515.   bfd_target_aout_flavour,
  516. #ifdef TARGET_IS_BIG_ENDIAN_P
  517.   true,                /* target byte order (big) */
  518.   true,                /* target headers byte order (big) */
  519. #else
  520.   false,            /* target byte order (little) */
  521.   false,            /* target headers byte order (little) */
  522. #endif
  523.   (HAS_RELOC | EXEC_P |        /* object flags */
  524.    HAS_LINENO | HAS_DEBUG |
  525.    HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
  526.   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
  527.   MY_symbol_leading_char,
  528.   AR_PAD_CHAR,            /* ar_pad_char */
  529.   15,                /* ar_max_namelen */
  530.   3,                /* minimum alignment */
  531. #ifdef TARGET_IS_BIG_ENDIAN_P
  532.   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  533.      bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  534.      bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
  535.   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  536.      bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  537.      bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
  538. #else
  539.   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  540.      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  541.      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
  542.   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  543.      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  544.      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
  545. #endif
  546.     {_bfd_dummy_target, MY_object_p, /* bfd_check_format */
  547.        bfd_generic_archive_p, MY_core_file_p},
  548.     {bfd_false, MY_mkobject,    /* bfd_set_format */
  549.        _bfd_generic_mkarchive, bfd_false},
  550.     {bfd_false, MY_write_object_contents, /* bfd_write_contents */
  551.        _bfd_write_archive_contents, bfd_false},
  552.  
  553.      BFD_JUMP_TABLE_GENERIC (MY),
  554.      BFD_JUMP_TABLE_COPY (MY),
  555.      BFD_JUMP_TABLE_CORE (MY),
  556.      BFD_JUMP_TABLE_ARCHIVE (MY),
  557.      BFD_JUMP_TABLE_SYMBOLS (MY),
  558.      BFD_JUMP_TABLE_RELOCS (MY),
  559.      BFD_JUMP_TABLE_WRITE (MY),
  560.      BFD_JUMP_TABLE_LINK (MY),
  561.      BFD_JUMP_TABLE_DYNAMIC (MY),
  562.  
  563.   (PTR) MY_backend_data,
  564. };
  565. #endif /* MY_BFD_TARGET */
  566.